/**
 * This method returns a set of different entities referenced in the configuration of this alert sender.
 */
public abstract Set<Object> getReferencedEntities();
/**
 * Only the plugin can "know" what kind of entities it can reference and is therefore able to read
 * them from the provided reader.
 * <p>
 * <b>WARNING:</b> this method must not reference any of the configuration instance fields as they will not
 * be initialized at the time this method is called.
 */
public abstract Set<Object> unmarshallReferencedEntities(Reader input);
/**
 * This writes out the set of referenced entities (the same set as would be returned by the {@link #getReferencedEntities()} method) 
 * to the provided writer.
 * <p>
 * <b>WARNING:</b> this method must not reference any of the configuration instance fields as they will not
 * be initialized at the time this method is called.
 */
public abstract void marshallReferencedEntities(Writer output);
/**
 * This will update all the configuration objects to reference the replaced entities instead of the original
 * ones.
 * <p>
 * This method is called during configuration import where the notification is first instantiated with the
 * configuration coming from the origin server (i.e. with most probably incorrect reference ids, etc.). Once
 * the notification is instantiated with this incorrect configuration and the user provides the mapping
 * that maps the original entities to the entities from the local RHQ installation, this method is called 
 * to update the incorrect configuration with the user provided corrections.
 * 
 * @param entityReplacements the keys of this map are objects from {@link #getReferencedEntities()}, the values
 * are replacements provided by the user. If the value is null, the user provided no alternative and the
 * original entity must therefore be removed from the resulting configuration.
 */
public abstract void updateConfigurationWithEntityReplacements(Map<Object, Object> entityReplacements);